<?php

class WebUser extends CWebUser
{
    protected $_isadmin;
    private $_role;
    // This is a function that checks the field 'role'
    // in the User model to be equal to 1, that means it's admin
    // access it by Yii::app()->user->isAdmin()
    public function isAdmin()
    {
        $user = $this->loadUser(Yii::app()->user->id);
        return $user === 'admin';
    }

    public function getIsAdmin()
    {
        if($this->_isadmin === null)
            return $this->isAdmin();
        return $this->_isadmin;
    }

    protected function loadUser($id=null)
    {
        if($this->_role===null)
        {
            $q = Yii::app()->db->createCommand("SELECT * FROM {{user}} WHERE id=:id");
            $q->bindParam(':id',$id);
            $this->_role = $q->query()->readColumn(11);
        }
        return $this->_role;
    }

    /**
     * Данный метод срабатывает после успешного входа пользователя в свою уч. запись.
     *
     * В таблицу и колонку user(login_time) записываются текущая дата и время.
     * В таблицу и колонку user(last_login_time) записываются дата и время
     *  последнего входа взятая из user(login_time),т.к она уже устареля.
     *
     * @param $fromCookie boolean Вход с кукисами
     * @return
     */
    protected function afterLogin($fromCookie = true)
    {

        $timestamp = time();
        $date = date('Y-m-d H:i:s',$timestamp);
        $id = Yii::app()->user->id;

        $conn = Yii::app()->db;
        $s = 'SELECT login_time,last_login_time FROM tbl_user WHERE id=:id';
        $command = $conn->createCommand($s);
        $command->bindParam(':id',$id,PDO::PARAM_STR);
        $result = $command->query();
        foreach($result as $r){

            //Преобразуем $first && $last в timestamp для сравнения
            $first = strtotime($r['login_time']);
            $last = strtotime($r['last_login_time']);

            //Если $first && $last NOT NULL,значит есть дата и время
            if($first && $last)
            {
                //Если login_time больше чем last_login_time, то в login_time добавляем текущюю дату и время, а last_login_time, вставляем login_time
                if($first > $last && $first < $timestamp)
                {
                    $connection =Yii::app()->db;
                    $sql = 'UPDATE tbl_user SET login_time=:timestamp,last_login_time=:last WHERE id=:id';
                    $comm = $connection->createCommand($sql);
                    $comm->bindParam(':timestamp',$date,PDO::PARAM_STR);
                    $comm->bindParam(':last',$r['login_time'],PDO::PARAM_STR);
                    $comm->bindParam(':id',$id,PDO::PARAM_STR);
                    $comm->execute();
                }
                //Если вход производится второй раз,то дата и время одинаковые, обновляем только колонку login_time
                elseif($first === $last && $first < $timestamp)
                {
                    $connection =Yii::app()->db;
                    $sql = 'UPDATE tbl_user SET login_time=:time WHERE id=:id';
                    $comm = $connection->createCommand($sql);
                    $comm->bindParam(':time',$date,PDO::PARAM_STR);
                    $comm->bindParam(':id',$id,PDO::PARAM_STR);
                    $comm->execute();

                }
            }
            //Если вход производится впервые, ставим дату и время одинаковыми
            elseif($r['login_time'] === NULL && $r['last_login_time'] === NULL)
            {
                $connection =Yii::app()->db;
                $sql = 'UPDATE tbl_user SET login_time=:timestamp,last_login_time=:timestamp WHERE id=:id';
                $comm = $connection->createCommand($sql);
                $comm->bindParam(':timestamp',$date,PDO::PARAM_STR);
                $comm->bindParam(':id',$id,PDO::PARAM_STR);
                $comm->execute();
            }
        }
        unset($timestamp,$date,$id);
    }



}